home *** CD-ROM | disk | FTP | other *** search
/ Euroscene 2 / Euroscene 2.iso / USEFUL / darkroom.s < prev    next >
Text File  |  1995-10-27  |  36KB  |  2,094 lines

  1. »»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  2. »                                        
  3. »    DarkRoom -40k Intro                    by Dweezil                
  4. »                                        
  5. »»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  6.  
  7. rot        equ    213
  8. zmp        equ    437
  9. part2_flash    equ    215
  10. part2_tm    equ    430
  11.  
  12. part3_tm    equ    400
  13.  
  14. w_blit        macro
  15. .\@wb        btst    #6,$002(a6)
  16.         bne.b    .\@wb
  17.         endm
  18.  
  19. go        move.l    $4.w,a6
  20.         moveq    #0,d0
  21.         lea    gfxname_0(pc),a1
  22.         jsr    -$228(a6)
  23.         move.l    d0,gfxbase_0
  24.         beq    exit_0
  25.         move.l    d0,a6
  26.         move.l  $22(a6),wbview_0
  27.         sub.l    a1,a1
  28.         jsr     -$de(a6)
  29.         jsr    -$10e(a6)
  30.         jsr    -$10e(a6)
  31.     ;    jsr    -$1e8(a6)
  32.         jsr    -$e4(a6)
  33.  
  34.         bsr    z_init
  35.  
  36.         lea    $dff000,a6
  37.         move    #$0020,$096(a6)
  38.         clr.l    $140(a6)
  39.  
  40.     ;    move    #$4000,$09a(a6)
  41.  
  42.         move.l    #copper_0,$080(a6)
  43.         bsr    clbss_0
  44.         bsr    go_part_1
  45.  
  46.         move.l    #copper_0,$080(a6)
  47.         bsr    clbss_0
  48.         bsr    go_part_2
  49.  
  50.         move.l    #copper_0,$080(a6)
  51.         bsr    clbss_0
  52.         bsr    go_part_3
  53.  
  54.         move.l    #copper_0,$080(a6)
  55.         bsr    clbss_0
  56.         bsr    go_part_4
  57.     
  58.         bsr    z_end
  59.         move    #$8020,$dff096
  60.  
  61.         move.l    gfxbase_0(pc),a6
  62.         jsr    -$e4(a6)
  63.     ;    jsr    -$1ce(a6)
  64.  
  65.         move.l    wbview_0(pc),a1
  66.         jsr    -$de(a6)
  67.         jsr    -$10e(a6)
  68.         jsr    -$10e(a6)
  69.         move.l    $26(a6),$dff080
  70.         move.l    a6,a1
  71.         move.l    $4.w,a6
  72.         jsr    -$19e(a6)
  73.  
  74. exit_0        moveq    #0,d0
  75.         rts
  76.  
  77. »» Clear bss-hunk
  78.  
  79. clbss_0        moveq    #0,d0
  80.         move.l    d0,d1
  81.         move.l    d0,d2
  82.         move.l    d0,d3
  83.         move.l    d0,a0
  84.         move.l    d0,a1
  85.         move.l    d0,a2
  86.         move.l    d0,a3
  87.  
  88.         lea    chip+chip_siz,a4
  89.         move    #chip_siz>>8-1,d4
  90. .clfast        rept    8
  91.         movem.l    d0-d3/a0-a3,-(a4)
  92.         endr
  93.         dbf    d4,.clfast
  94.         rts
  95.  
  96. gfxname_0    dc.b    "graphics.library",0
  97.         even
  98.  
  99. gfxbase_0    dc.l    0
  100. wbview_0    dc.l    0
  101.  
  102. ;; <1>
  103. »»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  104. »                                        
  105. »    " S o l a r  W i n d "                            
  106. »                                        
  107. »»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  108.  
  109. go_part_1    bsr    s_init_1
  110.         sf    stuff_1
  111.  
  112. mouse_1        bsr    do_wind_1
  113.  
  114.         move.l    #scopa_1,$080(a6)
  115.         bsr    plus_1
  116.  
  117.         bsr    do_wind_1
  118.  
  119.         move.l    #scopb_1,$080(a6)
  120.         bsr    minus_1
  121.  
  122.         cmp    #zmp+170,frame_1
  123.         bhs.b    .x    
  124.  
  125.         btst    #6,$bfe001
  126.         bne.b    mouse_1
  127.  
  128. .x        rts
  129.  
  130. s_init_1    lea    sptra_1,a0
  131.         move.l    #bpa1_1,d2
  132.         lea    sptrb_1,a1
  133.         move.l    #bpb1_1,d3
  134.         moveq    #0,d1
  135.         moveq    #3,d0
  136. .1        move    d2,6(a0,d1.w)
  137.         swap    d2
  138.         move    d2,2(a0,d1.w)
  139.         swap    d2    
  140.         move    d3,6(a1,d1.w)
  141.         swap    d3
  142.         move    d3,2(a1,d1.w)
  143.         swap    d3
  144.         addq    #8,d1
  145.         add.l    #10240,d2
  146.         add.l    #10240,d3
  147.         dbf    d0,.1
  148.  
  149.         lea    fractar_1,a0
  150.         move    #$17f,d2
  151.         move    #$181,d3
  152.         bsr    do_prog_1
  153.  
  154.         lea    zoomaa_1,a0
  155.         move    #-1,d2
  156.         move    #$180,d3
  157.         bsr    do_prog_1
  158.  
  159.         lea    rotate_1,a0
  160.         move    #$180,d2
  161.         move    #1,d3
  162.         bsr    do_prog_1
  163.  
  164.         move.l    #scopa_1,$080(a6)
  165.  
  166.         rts
  167.  
  168. do_wind_1    addq    #1,frame_1
  169.         moveq    #0,d0
  170.         move    frame_1(pc),d0
  171.         move.l    prgptr_1(pc),a0
  172.         cmp.l    (a0),d0
  173.         bne.b    .zop
  174.         move.l    4(a0),d0
  175.         move.l    d0,twist_1
  176.         cmp.l    #zoomaa_1,d0
  177.         bne.b    .2
  178.         st    stuff_1
  179. .2        addq.l    #8,prgptr_1
  180. .zop
  181.         bsr    do_pos_1
  182.         bsr    do_tube_1
  183.         bsr    do_blit_1
  184.         bsr    do_bli2_1
  185.  
  186.         rts
  187.  
  188. frame_1        dc    0
  189. twist_1        dc.l    hold_1
  190. prgptr_1    dc.l    program_1
  191.  
  192. program_1    dc.l    1,fractar_1
  193.         dc.l    rot,rotate_1
  194.         dc.l    zmp,zoomaa_1
  195.         dc.l    -1,-1
  196.  
  197.  
  198. »» calculate blit prog
  199.  
  200. do_prog_1    move    d3,d6
  201.         asl    #2,d3
  202.         move    d2,d5
  203.         asl    #2,d2
  204.         add    d5,d2
  205.         moveq    #8,d1
  206. .l1        move    d2,d7
  207.         moveq    #10,d0
  208. .l2        move    d3,d4
  209.         add    d7,d4
  210.         move    d4,(a0)+
  211.         sub    d5,d7
  212.         dbf    d0,.l2
  213.         sub    d6,d3
  214.         dbf    d1,.l1
  215.         rts
  216.  
  217. »» + laskuosuus        bpa -> bpb
  218.  
  219. plus_1        w_blit
  220.  
  221.         moveq    #0,d0
  222.         move.l    d0,$040(a6)
  223.         move.l    d0,$060(a6)
  224.         move.l    d0,$064(a6)
  225.         moveq    #-1,d0
  226.         move.l    d0,$044(a6)
  227.  
  228.         move    #$0f80,$040(a6)        bpa2 and bpa3 and bpa4 -> t
  229.         move.l    #bpa2_1,$050(a6)
  230.         move.l    #bpa3_1,$04c(a6)
  231.         move.l    #bpa4_1,$048(a6)
  232.         move.l    #t_1,$054(a6)
  233.         move    #$4014,$058(a6)
  234.  
  235.         w_blit
  236.  
  237.         move    #8,$062(a6)
  238.  
  239.         move    #$0fe6,$040(a6)        bpa1 + g -> bpb1
  240.         move.l    #t_1,$050(a6)
  241.         move.l    #g_1,$04c(a6)
  242.         move.l    #bpa1_1,$048(a6)
  243.         move.l    #bpb1_1,$054(a6)
  244.         move    #$4014,$058(a6)
  245.  
  246.         w_blit
  247.  
  248.         move    #0,$062(a6)
  249.  
  250.         move    #$0f9a,$040(a6)        bpa2 + 1 -> bpb2
  251.         move.l    #bpa1_1,$050(a6)
  252.         move.l    #bpb1_1,$04c(a6)
  253.         move.l    #bpa2_1,$048(a6)
  254.         move.l    #bpb2_1,$054(a6)
  255.         move    #$4014,$058(a6)
  256.  
  257.         w_blit
  258.  
  259.         move    #$0f9a,$040(a6)        bpa3 + 1 -> bpb3
  260.         move.l    #bpa2_1,$050(a6)
  261.         move.l    #bpb2_1,$04c(a6)
  262.         move.l    #bpa3_1,$048(a6)
  263.         move.l    #bpb3_1,$054(a6)
  264.         move    #$4014,$058(a6)
  265.  
  266.         w_blit
  267.  
  268.         move    #$0f9a,$040(a6)        bpa4 + 1 -> bpb4
  269.         move.l    #bpa3_1,$050(a6)
  270.         move.l    #bpb3_1,$04c(a6)
  271.         move.l    #bpa4_1,$048(a6)
  272.         move.l    #bpb4_1,$054(a6)
  273.         move    #$4014,$058(a6)
  274.  
  275.         rts
  276.  
  277.  
  278. »» - laskuosuus        bpb -> bpa
  279.  
  280. minus_1        w_blit
  281.  
  282.         moveq    #0,d0
  283.         move.l    d0,$040(a6)
  284.         move.l    d0,$060(a6)
  285.         move.l    d0,$064(a6)
  286.         moveq    #-1,d0
  287.         move.l    d0,$044(a6)
  288.  
  289.         move    #$0f01,$040(a6)        bpb2 and bpb3 and bpb4 -> t
  290.         move.l    #bpb2_1,$050(a6)
  291.         move.l    #bpb3_1,$04c(a6)
  292.         move.l    #bpb4_1,$048(a6)
  293.         move.l    #t_1,$054(a6)
  294.         move    #$4014,$058(a6)
  295.  
  296.         w_blit
  297.  
  298.         move    #8,$062(a6)
  299.         move    #$0f89,$040(a6)        bpb1 - g -> bpa1
  300.         move.l    #t_1,$050(a6)
  301.         move.l    #g_1,$04c(a6)
  302.         move.l    #bpb1_1,$048(a6)
  303.         move.l    #bpa1_1,$054(a6)
  304.         move    #$4014,$058(a6)
  305.  
  306.         w_blit
  307.  
  308.         move    #0,$062(a6)
  309.         move    #$0fa6,$040(a6)        bpb2 - 1 -> bpa2
  310.         move.l    #bpb1_1,$050(a6)
  311.         move.l    #bpa1_1,$04c(a6)
  312.         move.l    #bpb2_1,$048(a6)
  313.         move.l    #bpa2_1,$054(a6)
  314.         move    #$4014,$058(a6)
  315.  
  316.         w_blit
  317.  
  318.         move    #$0fa6,$040(a6)        bpb2 - 1 -> bpa2
  319.         move.l    #bpb2_1,$050(a6)
  320.         move.l    #bpa2_1,$04c(a6)
  321.         move.l    #bpb3_1,$048(a6)
  322.         move.l    #bpa3_1,$054(a6)
  323.         move    #$4014,$058(a6)
  324.  
  325.         w_blit
  326.  
  327.         move    #$0fa6,$040(a6)        bpb2 - 1 -> bpa2
  328.         move.l    #bpb3_1,$050(a6)
  329.         move.l    #bpa3_1,$04c(a6)
  330.         move.l    #bpb4_1,$048(a6)
  331.         move.l    #bpa4_1,$054(a6)
  332.         move    #$4014,$058(a6)
  333.  
  334.         rts
  335.  
  336.  
  337. »» put random stuff in the middle of the screen
  338.  
  339. do_tube_1    move.l    rand_1(pc),d0
  340.         add    frame_1(pc),d0
  341.     ;    add.l    $004(a6),d0
  342.         ror.l    #5,d0
  343.         eor    #$1dc4,d0
  344.         move.l    d0,rand_1
  345.  
  346.         lea    g_1,a0
  347.  
  348.         tst.b    stuff_1
  349.         bne.b    .2
  350.  
  351.         moveq    #3,d1    
  352. .1        eor.b    d0,126*48+19(a0)
  353.         swap    d0
  354.         eor.b    d0,126*48+20(a0)
  355.         add    #48,a0
  356.         add    a0,d0
  357.         ror.l    #1,d0
  358.         dbf    d1,.1
  359.         rts
  360.  
  361. .2        moveq    #3,d1    
  362. .3        clr.b    126*48+19(a0)
  363.         clr.b    126*48+20(a0)
  364.         add    #48,a0
  365.         dbf    d1,.3
  366.         rts
  367.  
  368. stuff_1        dc    0
  369.  
  370.  
  371. »» do the twist!
  372.  
  373. do_pos_1    moveq    #$1f,d0
  374.         and    frame_1(pc),d0
  375.         add    d0,d0
  376.         lea    .tab(pc),a0
  377.         move    (a0,d0),d0
  378.         move    d0,apos_1
  379.         rts
  380.  
  381. .tab    dc    %00000,%10000,%01000,%11000,%00100,%10100,%01100,%11100
  382.     dc    %00010,%10010,%01010,%11010,%00110,%10110,%01110,%11110
  383.     dc    %00001,%10001,%01001,%11001,%00101,%10101,%01101,%11101
  384.     dc    %00011,%10011,%01011,%11011,%00111,%10111,%01111,%11111
  385.  
  386. apos_1        dc    0
  387.  
  388. »» takaisinkopsublitti
  389.  
  390. do_bli2_1    move    apos_1(pc),d0
  391.         muls    #24,d0
  392.         move    apos_1(pc),d1
  393.         asr    #4,d1
  394.         add    d1,d0
  395.         add    d0,d0
  396.         ext.l    d0
  397.  
  398.         lea    t_1+$c0a,a0
  399.         sub.l    d0,a0
  400.  
  401.         move    apos_1(pc),d1
  402.         ror    #4,d1
  403.         and    #$f000,d1
  404.         or    #$09f0,d1
  405.  
  406.         w_blit
  407.  
  408.         move    d1,$040(a6)        t+logo -> g        
  409.         move.l    #0,$044(a6)
  410.         move.l    #$ffffffff,$044(a6)
  411.         move.l    #$00000000,$060(a6)
  412.         move.l    #$00000000,$064(a6)
  413.         move.l    a0,$050(a6)
  414.         move.l    #g_1,$054(a6)
  415.         move    #$4018,$058(a6)
  416.  
  417.         rts
  418.  
  419. »» blitter driver for zoomer
  420.  
  421. do_blit_1    lea    g_1-$c08,a0
  422.         lea    t_1,a4
  423.  
  424.         move    apos_1(pc),d5
  425.         move    d5,d4
  426.         muls    #384,d5
  427.         add    d4,d5
  428.         subq    #1,d5
  429.  
  430.         move    #$0803,d3        bltsize
  431.         move.l    twist_1(pc),a1
  432.         add    #$62c,a4        start pos.
  433.         add    #$62c,a0
  434.  
  435.         move    #$62c,d7        'modulo'
  436.         moveq    #8,d6            loop counter
  437.  
  438.         lea    $dff002,a6
  439.  
  440. .blit1        btst    #6,(a6)            
  441.         bne.b    .blit1
  442.  
  443.         move    #$0000,$042-2(a6)    clear bltcon1
  444.         move.l    #$ffffffff,$044-2(a6)    set masks
  445.         move.l    #$002a002a,$064-2(a6)    set modulos for A & D
  446.  
  447. .loop2        moveq    #10,d4
  448. .loop1        move    (a1)+,d0
  449.         add    d5,d0
  450.         moveq    #$f,d2
  451.         and    d0,d2
  452.         add    d2,d2
  453.         move    .con0(pc,d2),d2
  454.         asr    #3,d0
  455.         lea    (a0,d0),a3
  456. .blit2        btst    #6,(a6)
  457.         bne.b    .blit2
  458.         move    d2,$040-2(a6)        set bltcon0
  459.         movem.l    a3/a4,$050-2(a6)    set bltaptr & bltdptr
  460.         move    d3,$058-2(a6)        set size
  461.         subq    #4,a0
  462.         subq    #4,a4
  463.         dbf    d4,.loop1
  464.         add    d7,a0
  465.         add    d7,a4
  466.         dbf    d6,.loop2
  467.         lea    $dff000,a6
  468.         rts
  469.  
  470. .con0        dc    $f9f0,$e9f0,$d9f0,$c9f0,$b9f0,$a9f0,$99f0,$89f0
  471.         dc    $79f0,$69f0,$59f0,$49f0,$39f0,$29f0,$19f0,$09f0
  472.  
  473. rand_1        dc.l    $deadbeef
  474.  
  475. ;; <2>
  476. »»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  477. »                                                            
  478. »    " P a r t i c l e s "                                    
  479. »                                        
  480. »»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  481.  
  482. go_part_2    lea    $dff000,a6
  483.  
  484. mouse_2        tst.b    5(a6)
  485.         beq.b    mouse_2
  486. .1        tst.b    5(a6)
  487.         bne.b    .1
  488.  
  489.         bsr    laita2_2
  490.  
  491.         cmp    #part2_flash,frame_2
  492.         bne.b    .rer
  493.         bsr    laita1_2
  494.  
  495. .rer        movem.l    scr1_2(pc),d0-d3
  496.         move.l    d0,d4
  497.         move.l    d1,d0
  498.         move.l    d2,d1
  499.         move.l    d3,d2
  500.         move.l    d4,d3
  501.         movem.l    d0-d3,scr1_2
  502.  
  503.         move.l    d0,$0e0(a6)
  504.         move.l    d1,$0e4(a6)
  505.         move.l    d2,$0e8(a6)
  506.         move.l    #bpl_tx_2,$0ec(a6)
  507.  
  508.         move    frame_2(pc),d0
  509.         addq    #1,d0
  510.         move    d0,frame_2
  511.  
  512.         move.l    parpt_2(pc),a0
  513.         cmp    frame2_2(pc),d0
  514.         bne.b    .3
  515.  
  516.         addq    #4,a0
  517.         tst.b    1(a0)
  518.         bpl.b    .2
  519.         lea    param_2(pc),a0
  520.  
  521. .2        moveq    #0,d1
  522.         move.b    (a0),d1
  523.         add    d0,d1
  524.         move    d1,frame2_2
  525.         move.l    a0,parpt_2
  526.  
  527. .3        move.b    2(a0),d0
  528.         move.b    3(a0),d1
  529.     
  530.         bsr    vaaka_2
  531.         bsr    pysty_2
  532.  
  533.         move    frame_2(pc),d0
  534.  
  535.         cmp    #part2_tm+16,d0
  536.         beq.b    .x
  537.  
  538.         cmp    #part2_tm,d0
  539.         blo.b    .4
  540.         bsr    fadeout_2
  541. .4
  542.         move.l    #copper_2,$080(a6)
  543.         btst    #6,$bfe001
  544.         bne    mouse_2
  545.  
  546. .x        rts
  547.  
  548. frame_2        dc    0
  549. frame2_2    dc    1
  550.  
  551. parpt_2        dc.l    param_2
  552.  
  553. param_2        dc.b    1,$00,$05,$ff
  554.         dc.b    1,$00,$02,$00
  555.         dc.b    1,$00,$07,$ff
  556.         dc.b    1,$00,$00,$00
  557.         dc.b    1,$00,$01,$ff
  558.         dc.b    1,$00,$06,$00
  559.         dc.b    1,$00,$03,$ff
  560.         dc.b    1,$00,$04,$00
  561.         dc.l    -1
  562.  
  563. scr1_2        dc.l    bpl1_2
  564. scr2_2        dc.l    bpl2_2
  565. scr3_2        dc.l    bpl3_2
  566. scr4_2        dc.l    bpl4_2
  567.  
  568. fadeout_2    lea    fadehere_2,a0
  569.         moveq    #15,d3
  570. .lo        addq    #2,a0
  571.         move    (a0),d0
  572.         move    d0,d1
  573.         move    d0,d2
  574.  
  575.         and    #$000f,d0
  576.         and    #$00f0,d1
  577.         and    #$0f00,d2
  578.  
  579.         subq    #$0001,d0
  580.         bpl.b    .1
  581.         moveq    #0,d0
  582. .1        sub    #$0010,d1
  583.         bpl.b    .2
  584.         moveq    #0,d1
  585. .2        sub    #$0100,d2
  586.         bpl.b    .3
  587.         moveq    #0,d2
  588. .3        or    d2,d0
  589.         or    d1,d0
  590.         move    d0,(a0)+
  591.  
  592.         dbf    d3,.lo                
  593.         rts
  594.  
  595.  
  596. laita1_2    move.l    scr2_2(pc),a0
  597.         add    #112*40+18,a0
  598.         moveq    #-1,d0
  599.         moveq    #7,d1
  600. .1        move.l    d0,(a0)
  601.         move.l    d0,40(a0)
  602.         move.l    d0,80(a0)
  603.         move.l    d0,120(a0)
  604.         add    #160,a0
  605.         dbf    d1,.1
  606.         rts
  607.  
  608. laita2_2
  609.         move.l    scr2_2(pc),a0
  610.         add    #112*40,a0
  611.         lea    pic_2,a1
  612.         lea    bpl_tx_2,a2
  613.         add    #112*40,a2
  614.  
  615.         moveq    #31,d0
  616.         and    frame_2(pc),d0
  617.         mulu    #40,d0
  618.         add    d0,a0
  619.         add    d0,a1
  620.         add    d0,a2
  621.  
  622. .1        rept    10
  623.         move.l    (a1)+,d2
  624.         or.l    d2,(a0)+
  625.         move.l    d2,(a2)+
  626.         endr
  627.         rts
  628.  
  629. »» vaakasuuntainen siirto
  630.  
  631. v_bsiz_2    =    $0105
  632.  
  633. vaaka_2        move.l    scr1_2(pc),a0
  634.         lea    temp_2,a1
  635.  
  636.         move    #255,d4
  637.         moveq    #40,d2
  638.  
  639.         w_blit
  640.         moveq    #0,d3
  641.         move    d3,$042(a6)
  642.         move.l    d3,$064(a6)
  643.         moveq    #-1,d3
  644.         move.l    d3,$044(a6)
  645.  
  646. .lp        move    d1,d3
  647.         eor    d4,d3
  648.         btst    d0,d3
  649.  
  650.         beq.b    .bit1
  651.         w_blit
  652.         move    #$19f0,$040(a6)
  653.         movem.l    a0/a1,$050(a6)
  654.         move    #v_bsiz_2,$058(a6)
  655.         add    d2,a0
  656.         add    d2,a1
  657.         dbf    d4,.lp
  658.         rts
  659.  
  660. .bit1        addq    #2,a0
  661.         w_blit
  662.         move    #$f9f0,$040(a6)
  663.         movem.l    a0/a1,$050(a6)
  664.         move    #v_bsiz_2,$058(a6)
  665.         add    #38,a0
  666.         add    d2,a1
  667.         dbf    d4,.lp
  668.         rts
  669.  
  670. »» pystypalkkien siirrot
  671.  
  672. pysty_2        lea    temp_2,a0
  673.         lea    40(a0),a1
  674.         sub    #40,a0
  675.         move.l    scr2_2(pc),a2
  676.  
  677.         moveq    #-32,d2
  678.         moveq    #19,d6
  679.  
  680.         w_blit
  681.         move    #0,$042(a6)
  682.         moveq    #38,d3
  683.         move    d3,$062(a6)
  684.         move    d3,$064(a6)
  685.         move    d3,$066(a6)
  686.         moveq    #-1,d3
  687.         move.l    d3,$044(a6)
  688.  
  689. .ilo        moveq    #15,d5
  690. .l1        move    d1,d3
  691.         eor    d2,d3
  692.         add    d4,d4
  693.         btst    d0,d3
  694.         bne.b    .l1z
  695.         addq    #1,d4
  696. .l1z        addq    #1,d2
  697.         dbf    d5,.l1
  698.  
  699.         w_blit
  700.         move    #$0dd8,$040(a6)
  701.         movem.l    a0/a1/a2,$04c(a6)
  702.         move    d4,$070(a6)
  703.         move    #$4001,$058(a6)
  704.  
  705.         addq    #2,a0
  706.         addq    #2,a1
  707.         addq    #2,a2
  708.  
  709.         dbf    d6,.ilo
  710.         rts
  711.  
  712. ;; <3>
  713. »»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  714. »                                        
  715. »    " F i r e F l i e s "                            
  716. »                                            
  717. »»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  718.  
  719. offs_3        =    $780
  720.  
  721. go_part_3    lea    $dff000,a6
  722.  
  723.         bsr    init_3
  724.         bsr    dosine_3
  725.  
  726. mouse_3        tst.b    5(a6)
  727.         beq.b    mouse_3
  728. .1        tst.b    5(a6)
  729.         bne.b    .1
  730.  
  731.         addq    #1,frame_3
  732.  
  733.         move    #$7fe,d1
  734.  
  735.         move.l    posse_3(pc),d2
  736.         add.l    speed_3(pc),d2
  737.         move.l    d2,posse_3
  738.         swap    d2
  739.         add.l    #$800,speed_3
  740.         move    d2,d0
  741.         and    d1,d0
  742.  
  743.         lea    sin_3,a0
  744.         lea    cos_3-sin_3(a0),a1
  745.         lea    coords_3(pc),a2
  746.         move    (a0,d0),(a2)+
  747.         move    (a1,d0),(a2)+
  748.  
  749.         lsr    #1,d2
  750.         add    #offs_3,d2
  751.         move    d2,d0
  752.         and    d1,d0
  753.         move    (a0,d0),(a2)+
  754.         move    (a1,d0),(a2)+
  755.  
  756.         lsr    #1,d2
  757.         add    #offs_3,d2
  758.         move    d2,d0
  759.         and    d1,d0
  760.         move    (a0,d0),(a2)+
  761.         move    (a1,d0),(a2)+
  762.  
  763.         lsr    #1,d2
  764.         add    #offs_3,d2
  765.         move    d2,d0
  766.         and    d1,d0
  767.         move    (a0,d0),(a2)+
  768.         move    (a1,d0),(a2)+
  769.  
  770.         lsr    #1,d2
  771.         add    #offs_3,d2
  772.         move    d2,d0
  773.         and    d1,d0
  774.         move    (a0,d0),(a2)+
  775.         move    (a1,d0),(a2)+
  776.  
  777.         movem.l    coords_3-2(pc),d0-d4
  778.         lea    star_3+512-160,a0
  779.         lea    (a0,d1),a1
  780.         lea    (a0,d2),a2
  781.         lea    (a0,d3),a3
  782.         lea    (a0,d4),a4
  783.         add    d0,a0
  784.         bsr    vaaka_3
  785.  
  786.         movem.l    coords_3(pc),d0-d4
  787.         lea    star_3+512-128,a0
  788.         lea    (a0,d1),a1
  789.         lea    (a0,d2),a2
  790.         lea    (a0,d3),a3
  791.         lea    (a0,d4),a4
  792.         add    d0,a0
  793.         bsr    pysty_3
  794.  
  795.         move.l    cop2_3(pc),$080(a6)
  796.  
  797.         lea    ptexg_3(pc),a0
  798.         movem.l    (a0),d0-d3
  799.         exg    d0,d1
  800.         exg    d2,d3
  801.         movem.l    d0-d3,(a0)
  802.  
  803.         cmp    #part3_tm,frame_3
  804.         beq.b    .x
  805.  
  806.         btst    #6,$bfe001
  807.         bne    mouse_3
  808. .x        rts
  809.  
  810. speed_3        dc.l    $80000
  811. frame_3        dc    0
  812. posse_3        dc.l    0
  813.  
  814. ptexg_3
  815. cop1_3        dc.l    copper1_3
  816. cop2_3        dc.l    copper2_3
  817. scrl1_3        dc.l    line1_3
  818. scrl2_3        dc.l    line2_3
  819.  
  820. coords_3    dc    0,0
  821.         dc    0,0
  822.         dc    0,0
  823.         dc    0,0
  824.         dc    0,0
  825.  
  826. »» Calculate sin & cos lists using formula   sin a = a-a^3/3!+a^5/5!-a^7/7!
  827. »» 11 bits are used in the calculations for precision
  828.  
  829. dosine_3    lea    sin_3,a0
  830.         lea    1024(a0),a1
  831.         moveq    #0,d4
  832.  
  833.         move    #255,d3
  834. .l1        move.l    d4,d0
  835.         swap    d0
  836.         add.l    #823550,d4    Pi<<18
  837.         move    d0,d2
  838.         move    d0,d1
  839.         mulu    d1,d1
  840.         lsl.l    #4,d1
  841.         swap    d1
  842.         mulu    d1,d0
  843.         divu    #3<<11,d0
  844.         sub    d0,d2
  845.         mulu    d1,d0
  846.         divu    #10<<11,d0
  847.         add    d0,d2
  848.         mulu    d1,d0
  849.         divu    #21<<11,d0
  850.         sub    d0,d2
  851.         asr    #4,d2
  852.  
  853.         move    d2,(a0)+
  854.         move    d2,2046(a0)
  855.         move    d2,-(a1)
  856.         neg    d2
  857.         move    d2,1022(a0)
  858.         move    d2,1024(a1)
  859.  
  860.         dbf    d3,.l1
  861.         rts
  862.  
  863. »»»»»»» inittialiohjelma »»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  864.  
  865. init_3        lea    l_even_3,a1        Muodostetaan 1/0 bittitasot
  866.         lea    l_odd_3,a0
  867.         moveq    #-1,d1
  868.         moveq    #9,d0
  869. .1        move.l    d1,(a0)+
  870.         clr.l    (a1)+
  871.         dbf    d0,.1
  872.  
  873.         lea    copst_3(pc),a0        kopsataan copperlistat
  874.         move.l    cop1_3(pc),a1
  875.         move.l    cop2_3(pc),a2
  876.         moveq    #copstl_3>>2-1,d0
  877. .c1        move.l    (a0),(a1)+
  878.         move.l    (a0)+,(a2)+
  879.         dbf    d0,.c1
  880.  
  881.         move.l    scrl1_3(pc),d0        laitetaan niihin bpl-pointterit
  882.         move.l    cop1_3(pc),a0
  883.         bsr    .cz
  884.         move.l    scrl2_3(pc),d0
  885.         move.l    cop2_3(pc),a0
  886.         bsr    .cz
  887.  
  888.         bsr    inz_cl_3
  889.         bsr    do_sqt_3
  890.  
  891.         rts    
  892.  
  893. »»
  894.  
  895. .cz        moveq    #4-1,d1            Asettaa bpl-pointterit copperlistaan
  896. .cz1        move    d0,bploff_3+4(a0)
  897.         swap    d0
  898.         move    d0,bploff_3(a0)
  899.         swap    d0
  900.         addq    #8,a0
  901.         add.l    #40,d0
  902.         dbf    d1,.cz1
  903.         rts
  904.  
  905. copst_3        dc    $008e,$2c81,$0090,$2cc1        Copperlistan alku
  906.         dc    $0092,$0038,$0094,$00d0
  907.         dc    $0100,$5000,$0102,$0000
  908.         dc    $0104,$0000,$0180,$0000
  909.         dc    $0108,$ffd8,$010a,$ffd8
  910. bploff_3    =    *-copst_3+2
  911.         dc    $00e0,$0000,$00e2,$0000
  912.         dc    $00e4,$0000,$00e6,$0000
  913.         dc    $00e8,$0000,$00ea,$0000
  914.         dc    $00ec,$0000,$00ee,$0000
  915. copstl_3    =    *-copst_3
  916.  
  917. »» varilistat yms. rakennetaan
  918.  
  919. inz_cl_3    lea    cmaps_3,a0
  920.         lea    $1200(a0),a1
  921.         lea    .ctab(pc),a3
  922.         lea    cptab_3,a4
  923.  
  924.         moveq    #0,d4
  925.  
  926.         moveq    #$3f,d7
  927. .1        move.l    a0,(a4)+
  928.  
  929.         move.l    #l_even_3,d1
  930.         move    #$00f2,(a0)+
  931.         move    d1,(a0)+
  932.         move    #$00f0,(a0)+
  933.         swap    d1
  934.         move    d1,(a0)+
  935.  
  936.         move.l    #l_odd_3,d1
  937.         move    #$00f2,(a1)+
  938.         move    d1,(a1)+
  939.         move    #$00f0,(a1)+
  940.         swap    d1
  941.         move    d1,(a1)+
  942.  
  943.         move    #$0180,d1
  944.  
  945.         move    #$01a0,d2
  946.         moveq    #$f,d6
  947. .2        and    #$7e,d4
  948.         move    (a3,d4),d3
  949.         addq    #8,d4
  950.         move    d1,(a0)+
  951.         move    d3,(a0)+
  952.         move    d2,(a1)+
  953.         move    d3,(a1)+
  954.         addq    #2,d1    
  955.         addq    #2,d2
  956.         dbf    d6,.2
  957.         addq    #2,d4
  958.  
  959.         dbf    d7,.1
  960.         rts
  961.  
  962.  
  963. .ctab    blk    24,0
  964.  
  965.     dc    $000,$001,$002,$003,$004,$005,$006,$007
  966.     dc    $008,$009,$00a,$00b,$00c,$00d,$00e,$00f
  967.     dc    $22f,$44f,$88f,$aaf,$ccf,$eef,$fff,$fff
  968.     dc    $fff,$fff,$fff,$fff,$fff,$eef,$ccf,$aaf
  969.     dc    $88f,$11e,$00c,$00a,$008,$006,$004,$002
  970.     blk    32,0
  971.  
  972.     dc    $000,$001,$002,$003,$004,$005,$006,$007
  973.     dc    $008,$009,$00a,$00b,$00c,$00d,$00e,$00f
  974.     dc    $00e,$00d,$01c,$02b,$03a,$049,$058,$067
  975.     dc    $076,$085,$094,$0a3,$0b2,$0c1,$0d0,$0e0
  976.     dc    $0f0,$0e0,$0d0,$1c0,$2b0,$3a0,$490,$580
  977.     dc    $670,$760,$850,$940,$a30,$b20,$c10,$d00
  978.     dc    $e00,$f00,$e00,$d00,$c00,$b00,$a00,$900
  979.     dc    $800,$700,$600,$500,$400,$300,$200,$100
  980.  
  981. »» muodostetaan taulukkoja
  982.  
  983. do_sqt_3    lea    star_3,a0
  984.         lea    1024(a0),a1
  985.         move    #511,d0
  986. .1        moveq    #5,d2
  987.         add    d0,d2
  988.         move.l    #$100,d1
  989.         divu    d2,d1    
  990.  
  991.         move.b    d1,(a0)+
  992.         move.b    d1,-(a1)
  993.         dbf    d0,.1
  994.         rts
  995.  
  996. »» rakennetaan copperlista
  997.  
  998. pysty_3        move.l    #$2c01fffe,d1
  999.         move.l    #$01000000,d2
  1000.  
  1001.         move.l    cop2_3(pc),a5
  1002.         add    #copstl_3,a5
  1003.  
  1004.         moveq    #$7f,d3
  1005.  
  1006.         w_blit
  1007.  
  1008.         move.l    #$09f00000,$040(a6)
  1009.         move.l    #$ffffffff,$044(a6)
  1010.         move.l    #$00000000,$064(a6)
  1011.  
  1012. .zoka        move.b    (a0)+,d0        Even line
  1013.         add.b    (a1)+,d0
  1014.         add.b    (a2)+,d0
  1015.         add.b    (a3)+,d0
  1016.         add.b    (a4)+,d0
  1017.  
  1018.         and    #$fc,d0
  1019.         move.l    cptab_3(pc,d0),d0
  1020.  
  1021.         move.l    d1,(a5)+
  1022.         add.l    d2,d1
  1023.  
  1024.         w_blit
  1025.  
  1026.         move.l    d0,$050(a6)
  1027.         move.l    a5,$054(a6)
  1028.         move    #$0109,$058(a6)
  1029.         add    #$48,a5
  1030.  
  1031.         move.b    (a0)+,d0        Odd line
  1032.         add.b    (a1)+,d0
  1033.         add.b    (a2)+,d0
  1034.         add.b    (a3)+,d0
  1035.         add.b    (a4)+,d0
  1036.  
  1037.         and    #$fc,d0
  1038.         move.l    cptab_3(pc,d0),d0
  1039.         add.l    #$1200,d0
  1040.         move.l    d1,(a5)+
  1041.         add.l    d2,d1
  1042.         bcc.b    .b3
  1043.         move.l    #$ffe1fffe,(a5)+
  1044.  
  1045. .b3        w_blit
  1046.  
  1047.         move.l    d0,$050(a6)
  1048.         move.l    a5,$054(a6)
  1049.         move    #$0109,$058(a6)
  1050.         add    #$48,a5
  1051.  
  1052.         dbf    d3,.zoka
  1053.  
  1054.         move.l    #$01800000,(a5)+
  1055.  
  1056.         move.l    #-2,(a5)+
  1057.         rts
  1058.     
  1059. cptab_3        ds.l    $40
  1060.  
  1061. »» rakennetaan vaakarivi
  1062.  
  1063. vaaka_3        move.l    scrl2_3(pc),a5
  1064.         moveq    #9,d7
  1065. .a        moveq    #15,d5
  1066. .b        rept    2
  1067.         move.b    (a0)+,d0
  1068.         add.b    (a1)+,d0
  1069.         add.b    (a2)+,d0
  1070.         add.b    (a3)+,d0
  1071.         add.b    (a4)+,d0
  1072.         add.b    d0,d0
  1073.         addx.l    d4,d4
  1074.         add.b    d0,d0
  1075.         addx.l    d3,d3
  1076.         add.b    d0,d0
  1077.         addx.l    d2,d2
  1078.         add.b    d0,d0
  1079.         addx.l    d1,d1
  1080.         endr
  1081.         dbf    d5,.b
  1082.         move.l    d4,120(a5)
  1083.         move.l    d3,80(a5)
  1084.         move.l    d2,40(a5)
  1085.         move.l    d1,(a5)+
  1086.         dbf    d7,.a
  1087.         rts
  1088.  
  1089. ;; <4>
  1090. »»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  1091. »                                        
  1092. »    " L a z e r s "                                
  1093. »                                        
  1094. »»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  1095.  
  1096. lines_4        =    64
  1097.  
  1098. go_part_4    lea    $dff000,a6
  1099.  
  1100.         move.b    #$ac,lin1_4
  1101.         move.b    #$ac,lin2_4
  1102.  
  1103.         bsr    do_sine_4
  1104.  
  1105. mouse_4        tst.b    5(a6)
  1106.         beq.b    mouse_4
  1107. .1        tst.b    5(a6)
  1108.         bne.b    .1
  1109.  
  1110.         bsr.b    avaa_4
  1111.  
  1112.         movem.l    scr1_4(pc),d0-d1
  1113.         exg    d0,d1
  1114.         movem.l    d0-d1,scr1_4
  1115.  
  1116.         add.l    #$500,d0
  1117.         move.l    d0,$0e0(a6)
  1118.         move.l    d0,$0e4(a6)
  1119.         move.l    #pic_4,$0e8(a6)
  1120.  
  1121.         addq    #1,frame_4
  1122.  
  1123.         bsr    clear_4
  1124.         bsr    radat_4
  1125.         bsr    dolines_4
  1126.  
  1127.         move.l    #copper_4,$080(a6)
  1128.  
  1129.         btst    #6,$bfe001
  1130.         bne    mouse_4
  1131.  
  1132.         rts
  1133.  
  1134. frame_4        dc    0
  1135.  
  1136. avaa_4        move.b    lin1_4,d0
  1137.         cmp.b    #$99,d0
  1138.         beq.b    .x
  1139.         subq.b    #1,lin1_4
  1140.         addq.b    #1,lin2_4
  1141. .x        rts
  1142.  
  1143. »» Clear
  1144.  
  1145. clear_4        w_blit
  1146.         move.l    #$01000000,$040(a6)
  1147.         move    #0,$066(a6)
  1148.         move.l    scr2_4(pc),a0
  1149.         add    #32*40,a0
  1150.         move.l    a0,$054(a6)
  1151.         move    #$4014,$058(a6)
  1152.         rts
  1153.  
  1154. »» Laskee radat
  1155.  
  1156. radat_4        move.l    #$ffff,d2
  1157.         move    frame_4(pc),d6
  1158.         moveq    #$40,d0
  1159.         sub    d6,d0
  1160.         bmi.b    .fg
  1161.  
  1162.         asr    #2,d0
  1163.         ror.l    d0,d2
  1164.  
  1165. .fg        moveq    #0,d5
  1166.         sub    #$20,d6
  1167.         add    d6,d6
  1168.  
  1169.         ror    d6,d2
  1170.         move    d6,d7
  1171.  
  1172. .lp        lea    sin_4,a1
  1173.         lea    rata_4,a2
  1174.  
  1175.         move    frame_4(pc),d5
  1176.  
  1177.         btst    #8,d5
  1178.         bne.b    .sfg
  1179.         not    d5
  1180.         add    #$100,d5
  1181. .sfg        sub    #$80,d5
  1182.         ext    d5
  1183.         asl    #4,d5
  1184.  
  1185.         and    #$fe,d6
  1186.         and    #$fe,d7
  1187.  
  1188.         moveq    #lines_4-1,d4
  1189.  
  1190. .zp        move    d5,d0
  1191.         add    (a1,d7),d0
  1192.         add    (a1,d6),d0
  1193.         move    64(a1,d7),d1
  1194.         add    64(a1,d6),d1
  1195.  
  1196.         move    d0,(a2)+
  1197.         move    d1,(a2)+
  1198.         move    d2,(a2)+
  1199.  
  1200.         ror    #1,d2
  1201.  
  1202.         addq.b    #4,d6
  1203.         addq.b    #8,d7
  1204.  
  1205.         dbf    d4,.zp
  1206.  
  1207.         rts
  1208.  
  1209.  
  1210. »» Lineprutku
  1211.  
  1212. dolines_4    move.l    scr2_4(pc),a0
  1213.         add    #6420,a0
  1214.         lea    rata_4,a1
  1215.  
  1216.         w_blit            Init line
  1217.         moveq    #-1,d2
  1218.         move.l    d2,$044(a6)
  1219.  
  1220.         moveq    #40,d2
  1221.         move    d2,$060(a6)
  1222.         move    d2,$066(a6)
  1223.         move    #$8000,$074(a6)
  1224.  
  1225.         moveq    #lines_4-1,d5
  1226.  
  1227. .ll        movem    (a1)+,d0/d1/d4
  1228.         moveq    #0,d2        Draw the line
  1229.         tst    d0
  1230.         bpl.b    .1
  1231.         neg    d0
  1232.         moveq    #16,d2
  1233. .1        tst    d1
  1234.         bpl.b    .2
  1235.         neg    d1
  1236.         addq    #8,d2
  1237. .2        cmp    d0,d1
  1238.         blo.b    .3
  1239.         bne.b    .z
  1240.         tst    d0
  1241.         beq.b    .x
  1242. .z        exg    d0,d1
  1243.         addq    #4,d2
  1244.         move    #$2002,d3
  1245.         bra.b    .4
  1246. .3        move    #$2802,d3
  1247. .4        add    d1,d1
  1248.  
  1249.         w_blit
  1250.  
  1251.         move    d4,$072(a6)
  1252.         move.l    a0,$048(a6)
  1253.         move.l    a0,$054(a6)
  1254.         move    d1,$062(a6)
  1255.         sub    d0,d1
  1256.         bpl.b    .5
  1257.         addq    #2,d2
  1258. .5        move    #$0bea,$040(a6)
  1259.         move    .bcon0(pc,d2),$042(a6)
  1260.         move    d1,$052(a6)
  1261.         sub    d0,d1
  1262.         move    d1,$064(a6)
  1263.         move    d3,$058(a6)
  1264.  
  1265. .x        dbf    d5,.ll
  1266.         rts
  1267.  
  1268. .bcon0        dc    %0010001,%1010001
  1269.         dc    %0000001,%1000001
  1270.         dc    %0011001,%1011001
  1271.         dc    %0000101,%1000101
  1272.         dc    %0010101,%1010101
  1273.         dc    %0001001,%1001001
  1274.         dc    %0011101,%1011101
  1275.         dc    %0001101,%1001101
  1276.  
  1277. »» Calculate sin & cos lists using formula   sin a = a-a^3/3!+a^5/5!-a^7/7!
  1278. »» 11 bits are used in the calculations for precision
  1279.  
  1280. do_sine_4    lea    sin_4,a0
  1281.         lea    128(a0),a1
  1282.  
  1283.         move.l    #823550<<2,d4
  1284.         moveq    #31,d3
  1285. .l1        move.l    d4,d0
  1286.         swap    d0
  1287.         add.l    #823550<<3,d4    Pi<<18
  1288.         move    d0,d2
  1289.         move    d0,d1
  1290.         mulu    d1,d1
  1291.         lsl.l    #4,d1
  1292.         swap    d1
  1293.         mulu    d1,d0
  1294.         divu    #3<<11,d0
  1295.         sub    d0,d2
  1296.         mulu    d1,d0
  1297.         divu    #10<<11,d0
  1298.         add    d0,d2
  1299.         mulu    d1,d0
  1300.         divu    #21<<11,d0
  1301.         sub    d0,d2
  1302.         asr    #2,d2
  1303.  
  1304.         move    d2,(a0)+
  1305.         move    d2,254(a0)
  1306.         move    d2,-(a1)
  1307.         neg    d2
  1308.         move    d2,126(a0)
  1309.         move    d2,128(a1)
  1310.  
  1311.         dbf    d3,.l1
  1312.         rts
  1313.  
  1314. scr1_4        dc.l    bpl1_4
  1315. scr2_4        dc.l    bpl2_4
  1316.  
  1317. ;; <5>
  1318. »»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  1319. »                                        
  1320. »    R e p l a y  R o u t i n e                        
  1321. »                                                
  1322. »»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  1323.  
  1324.  
  1325. ** ====    Initialize ============================================    **
  1326.  
  1327. z
  1328. z_unptb    dc.b    $00,$00,$01,$02,$04,$08,$10,$20
  1329.     dc.b    $40,$ff,$fe,$fc,$f8,$f0,$e0,$c0
  1330.  
  1331. z_init    lea    z_data,a4
  1332.     lea    biisi,a0
  1333.     move.l    a4,a1
  1334.  
  1335.     move    #biisi_l>>3-1,d0
  1336. .yt    move.l    (a0)+,(a1)+
  1337.     move.l    (a0)+,(a1)+
  1338.     dbf    d0,.yt
  1339.  
  1340.     lea    z(pc),a5
  1341.  
  1342.     move.l    14(a4),d0        UnSqueeze samples
  1343.     lea    (a4,d0.l),a0
  1344.     move.l    (a0)+,d0
  1345.     lea    -4(a0,d0.l),a1
  1346.     lsr.l    #1,d0
  1347.     add.l    d0,a0
  1348.     subq    #1,d0
  1349.     move    d0,d1
  1350. .mo    move.b    -(a0),-(a1)
  1351.     dbf    d1,.mo
  1352.  
  1353.     subq    #4,a0
  1354.     moveq    #0,d1
  1355.     moveq    #0,d3
  1356.  
  1357. .un    move.b    (a1)+,d1
  1358.     moveq    #$f,d2
  1359.     and    d1,d2
  1360.     lsr    #4,d1
  1361.     tst    d1
  1362.     bne.b    .u1
  1363.     moveq    #0,d3
  1364. .u1    add.b    z_unptb(pc,d1),d3
  1365.     move.b    d3,(a0)+
  1366.     tst    d2
  1367.     bne.b    .u2
  1368.     moveq    #0,d3
  1369. .u2    add.b    z_unptb(pc,d2),d3
  1370.     move.b    d3,(a0)+
  1371.     dbf    d0,.un
  1372.  
  1373.     lea    $dff000,a6
  1374.  
  1375.     lea    z_vibtb-z(a5),a0    Calculate vibrato table
  1376.     lea    z_sinus-z(a5),a1
  1377.     moveq    #$3f,d0
  1378. .1    move    (a1)+,d4
  1379.     moveq    #0,d2
  1380.     moveq    #15,d1
  1381. .2    move    d2,d3
  1382.     asr    #7,d3
  1383.     move.b    d3,(a0)+
  1384.     add    d4,d2
  1385.     dbf    d1,.2
  1386.     dbf    d0,.1
  1387.  
  1388.     move.l    (a4),d0            Add offset to songpos-pointer
  1389.     lea    (a4,d0.l),a0
  1390.     move.l    a0,(a4)
  1391.  
  1392. .3    move.l    (a0),d0            Add offsets to songpos-table
  1393.     bmi.s    .4
  1394.     add.l    a4,d0
  1395.     move.l    d0,(a0)+
  1396.     bra.s    .3
  1397. .4
  1398.     lea    6(a4),a0
  1399.     move.l    a4,d1
  1400.  
  1401.     moveq    #31-1,d0        Add offsets to samplepointers
  1402. z_sloop    addq.l    #8,a0
  1403.     add.l    d1,(a0)+
  1404.     add.l    d1,(a0)+
  1405.     dbf    d0,z_sloop
  1406.  
  1407.     moveq    #-4,d0
  1408.     move    d0,z_song-z(a5)
  1409.     move.b    d0,z_pos-z(a5)
  1410.  
  1411.     move.b    #$06,z_speed-z(a5)
  1412.     move.b    #$01,z_count-z(a5)
  1413.  
  1414.     bset    #1,$bfe001
  1415.  
  1416.     lea    z_ociab-z(a5),a0
  1417.     lea    $bfd000,a1
  1418.     move.l    $78.w,(a0)+
  1419.     move.l    $6c.w,(a0)+
  1420.     move.b    $400(a1),(a0)+
  1421.     move.b    $500(a1),(a0)+
  1422.     move.b    $e00(a1),(a0)+
  1423.     move.b    $f00(a1),(a0)+
  1424.     move    $01c(a6),(a0)+
  1425.     move    #$7fff,$09a(a6)
  1426.  
  1427.     move.b    #$02,$500(a1)        $200 = 11.3 raster lines
  1428.     move.b    #$00,$400(a1)
  1429.     move.b    #$1f,$d00(a1)
  1430.     move.b    #$81,$d00(a1)
  1431.     move.b    #$1c,$e00(a1)
  1432.     lea    z_irq1-z(a5),a0
  1433.     move.l    a0,$78.w
  1434.     lea    z_pirq-z(a5),a0
  1435.     move.l    a0,$6c.w
  1436.     move    #$e020,$09a(a6)
  1437.  
  1438.     bra    z_quiet
  1439.  
  1440. ** ====    Disable sound =========================================    **
  1441.  
  1442. z_end    lea    $dff000,a6
  1443.     lea    z_ociab(pc),a0
  1444.     lea    $bfd000,a1
  1445.     move    #$7fff,$09a(a6)
  1446.     move.l    (a0)+,$78.w
  1447.     move.l    (a0)+,$6c.w
  1448.     move.b    (a0)+,$400(a1)
  1449.     move.b    (a0)+,$500(a1)
  1450.     move.b    #$af,$d00(a1)
  1451.     move.b    (a0)+,$e00(a1)
  1452.     move.b    (a0)+,$f00(a1)
  1453.     move    (a0)+,d0
  1454.     or    #$8000,d0
  1455.     move    d0,$09a(a6)
  1456.  
  1457. z_quiet    clr    $0a8(a6)
  1458.     clr    $0b8(a6)
  1459.     clr    $0c8(a6)
  1460.     clr    $0d8(a6)
  1461.     move    #$000f,$096(a6)
  1462.     rts
  1463.  
  1464. ** ====    Play music ============================================    **
  1465.  
  1466. z_pirq    movem.l    d0-d4/a0-a6,-(sp)
  1467.     bsr    z_music
  1468.     move    #$0020,$09c(a6)
  1469.     movem.l    (sp)+,d0-d4/a0-a6
  1470.     rte
  1471.  
  1472. z_music    lea    z_data,a4
  1473.     lea    z(pc),a5
  1474.     lea    $dff000,a6
  1475.  
  1476.     clr    z_dmaen-z(a5)
  1477.  
  1478.     move.b    z_speed-z(a5),d0
  1479.     beq    z_ende
  1480.     subq.b    #1,z_count-z(a5)    New note?
  1481.     bne    z_nonew
  1482.     move.b    d0,z_count-z(a5)
  1483.  
  1484.     addq.b    #4,z_pos-z(a5)        Proceed in song
  1485.     bne.s    z_newpa
  1486.  
  1487.     move.l    (a4),a0            New pattern
  1488.     addq    #4,z_song-z(a5)
  1489.     move    z_song-z(a5),d0
  1490.     move.l    (a0,d0.w),d0
  1491.     bpl.s    .1
  1492.     clr    z_song-z(a5)
  1493.     clr.b    z_pos-z(a5)
  1494.     move.l    (a0),d0
  1495. .1    move.l    d0,z_patt-z(a5)
  1496.  
  1497. z_newpa    move.b    z_pos-z(a5),d0        Play new notes
  1498.  
  1499.     move.l    z_patt-z(a5),a0
  1500.  
  1501.     pea    .1-z(a5)
  1502.     lea    z_voi1-z(a5),a3
  1503.     cmp.b    (a0),d0
  1504.     bne    z_playo
  1505.     move.l    (a0)+,d1
  1506.     bra    z_playn
  1507.  
  1508. .1    pea    .2-z(a5)
  1509.     lea    z_voi2-z(a5),a3
  1510.     addq.b    #1,d0
  1511.     cmp.b    (a0),d0
  1512.     bne    z_playo
  1513.     move.l    (a0)+,d1
  1514.     bra    z_playn
  1515.  
  1516. .2    pea    .3-z(a5)
  1517.     lea    z_voi3-z(a5),a3
  1518.     addq.b    #1,d0
  1519.     cmp.b    (a0),d0
  1520.     bne    z_playo
  1521.     move.l    (a0)+,d1
  1522.     bra    z_playn
  1523.  
  1524. .3    pea    .4-z(a5)
  1525.     lea    z_voi4-z(a5),a3
  1526.     addq.b    #1,d0
  1527.     cmp.b    (a0),d0
  1528.     bne    z_playo
  1529.     move.l    (a0)+,d1
  1530.     bra    z_playn
  1531.  
  1532. .4    move.l    a0,z_patt-z(a5)
  1533.  
  1534. z_nonew    lea    z_voi1-z(a5),a1        Do effects
  1535.     bsr    z_doefx
  1536.     move    d4,$0a6(a6)
  1537.     move    14(a1),$0a8(a6)
  1538.  
  1539.     lea    z_voi2-z(a5),a1
  1540.     bsr    z_doefx
  1541.     move    d4,$0b6(a6)
  1542.     move    14(a1),$0b8(a6)
  1543.  
  1544.     lea    z_voi3-z(a5),a1
  1545.     bsr    z_doefx
  1546.     move    d4,$0c6(a6)
  1547.     move    14(a1),$0c8(a6)
  1548.  
  1549.     lea    z_voi4-z(a5),a1
  1550.     bsr    z_doefx
  1551.     move    d4,$0d6(a6)
  1552.     move    14(a1),$0d8(a6)
  1553.  
  1554.     move    z_dmaen-z(a5),d0
  1555.     beq.s    z_ende
  1556.     move    d0,$096(a6)
  1557.     or    #$8000,d0
  1558.     move    d0,z_dmaen-z(a5)
  1559.  
  1560.     ror    #1,d0
  1561.     bpl.s    .1
  1562.     move.l    z_voi1+2-z(a5),$0a0(a6)
  1563.     move    z_voi1+6-z(a5),$0a4(a6)
  1564. .1    ror    #1,d0
  1565.     bpl.s    .2
  1566.     move.l    z_voi2+2-z(a5),$0b0(a6)
  1567.     move    z_voi2+6-z(a5),$0b4(a6)
  1568. .2    ror    #1,d0
  1569.     bpl.s    .3
  1570.     move.l    z_voi3+2-z(a5),$0c0(a6)
  1571.     move    z_voi3+6-z(a5),$0c4(a6)
  1572. .3    ror    #1,d0
  1573.     bpl.s    .4
  1574.     move.l    z_voi4+2-z(a5),$0d0(a6)
  1575.     move    z_voi4+6-z(a5),$0d4(a6)
  1576. .4
  1577.  
  1578. z_ende    move.b    #$1d,$bfde00
  1579.     rts
  1580.  
  1581. z_irq1    tst.b    $bfdd00
  1582.     move    z_dmaen(pc),$dff096
  1583.     move.l    #z_irq2,$78.w
  1584.     move    #$2000,$dff09c
  1585.     move.b    #$1d,$bfde00
  1586.     rte
  1587.  
  1588. z_irq2    tst.b    $bfdd00
  1589.     move.l    a6,-(sp)
  1590.     lea    $dff000,a6
  1591.     move.l    z_voi1+8(pc),$0a0(a6)    Set repeat pointers
  1592.     move    z_voi1+12(pc),$0a4(a6)
  1593.     move.l    z_voi2+8(pc),$0b0(a6)
  1594.     move    z_voi2+12(pc),$0b4(a6)
  1595.     move.l    z_voi3+8(pc),$0c0(a6)
  1596.     move    z_voi3+12(pc),$0c4(a6)
  1597.     move.l    z_voi4+8(pc),$0d0(a6)
  1598.     move    z_voi4+12(pc),$0d4(a6)
  1599.     move    #$2000,$09c(a6)
  1600.     lea    z_irq1(pc),a6
  1601.     move.l    a6,$78.w
  1602.     move.l    (sp)+,a6
  1603.     move.b    #$1c,$bfde00
  1604.     rte
  1605.  
  1606. z_doefx    move    16(a1),d4        Get period
  1607.     move.b    24(a1),d0        Do effect commands
  1608.     ext    d0
  1609.     add    d0,d0
  1610.     moveq    #0,d1
  1611.     move.b    25(a1),d1        d1 = effect data
  1612.  
  1613.     move.b    z_count-z(a5),d2
  1614.     cmp.b    z_speed-z(a5),d2
  1615.     bne.s    .1
  1616.  
  1617.     move    z_jump1(pc,d0.w),d0
  1618.     jmp    (a5,d0.w)
  1619. .1    move    z_jump2(pc,d0.w),d0
  1620.     jmp    (a5,d0.w)
  1621.  
  1622. z_jump1    dc    z_retrn-z,z_retrn-z,z_retrn-z,z_retrn-z    Count = Speed
  1623.     dc    z_retrn-z,z_retrn-z,z_retrn-z,z_retrn-z    New note
  1624.     dc    z_retrn-z,z_ofset-z,z_retrn-z,z_posjm-z
  1625.     dc    z_setvl-z,z_ptbrk-z,z_ecmds-z,z_setsp-z
  1626.  
  1627. z_jump2    dc    z_arpeg-z,z_sldup-z,z_sldwn-z,z_tport-z    Count <> Speed
  1628.     dc    z_vibra-z,z_tpvsl-z,z_vibvs-z,z_retrn-z        
  1629.     dc    z_retrn-z,z_retrn-z,z_volsl-z,z_retrn-z
  1630.     dc    z_retrn-z,z_retrn-z,z_retrn-z,z_retrn-z
  1631.  
  1632. z_arpls    dc.b    0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0
  1633.     dc.b    1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1
  1634.  
  1635. z_retrn    rts
  1636.  
  1637. z_arpeg    tst    d1            CMD 0:    Arpeggio
  1638.     beq.s    z_retrn
  1639.     move.b    z_count-z(a5),d0
  1640.     ext    d0
  1641.     move.b    z_arpls(pc,d0.w),d0
  1642.     beq.s    z_arpg0
  1643.     subq.b    #1,d0
  1644.     beq.s    z_arpg1
  1645.     and    #$f,d1
  1646.     add    d1,d1
  1647.     add    18(a1),d1
  1648.     add    #z_notes-z,d1
  1649.     move    (a5,d1.w),d4
  1650.     rts
  1651. z_arpg1    lsr    #4,d1
  1652.     add    d1,d1
  1653.     add    18(a1),d1
  1654.     add    #z_notes-z,d1
  1655.     move    (a5,d1.w),d4
  1656.     rts
  1657. z_arpg0    move    18(a1),d1
  1658.     add    #z_notes-z,d1
  1659.     move    (a5,d1.w),d4
  1660.     rts
  1661.  
  1662. z_sldup    sub    d1,d4            CMD 1:    Slide up
  1663.     cmp    #$71,d4
  1664.     bcc.s    .1
  1665.     move    #$71,d4
  1666. .1    move    d4,16(a1)
  1667.     rts
  1668.  
  1669. z_sldwn    add    d1,d4            CMD 2:    Slide down
  1670.     cmp    #$358,d4
  1671.     bmi.s    .1
  1672.     move    #$358,d4
  1673. .1    move    d4,16(a1)
  1674.     rts
  1675.  
  1676. z_tport    tst    d1            CMD 3:    Tone portamento
  1677.     beq.s    z_port2
  1678.     move.b    d1,22(a1)
  1679.  
  1680. z_port2    moveq    #0,d0
  1681.     move.b    22(a1),d0
  1682.     move    30(a1),d2
  1683.  
  1684.     cmp    d2,d4
  1685.     bpl.s    z_tprtu
  1686.  
  1687.     add    d0,d4
  1688.     cmp    d2,d4
  1689.     bmi.s    .1
  1690.     move    d2,d4
  1691. .1    move    d4,16(a1)
  1692.     rts
  1693.  
  1694. z_tprtu    sub    d0,d4
  1695.     cmp    d2,d4
  1696.     bpl.s    .1
  1697.     move    d2,d4
  1698. .1    move    d4,16(a1)
  1699.     rts
  1700.  
  1701. z_vibra    tst.b    d1            CMD 4:    Vibrato
  1702.     beq.s    z_dovib
  1703.     move.b    d1,26(a1)
  1704.  
  1705. z_dovib    move.b    28(a1),d0        Vibrate period
  1706.     add    d0,d0
  1707.     add    d0,d0
  1708.     and    #$3f0,d0
  1709.     moveq    #$f,d2
  1710.     and.b    26(a1),d2
  1711.     add    d0,d2
  1712.     add    #z_vibtb-z,d2
  1713.     move.b    (a5,d2),d2
  1714.     ext    d2
  1715.     add    d2,d4
  1716.     moveq    #-$10,d0        Vibrato speed
  1717.     and.b    26(a1),d0
  1718.     lsr.b    #2,d0
  1719.     add.b    d0,28(a1)
  1720.     rts
  1721.  
  1722. z_ofset    lsl    #7,d1            Cmd 9:    Set sample offset
  1723.     cmp    6(a1),d1
  1724.     bhi.s    .2
  1725.     sub    d1,6(a1)
  1726.     ext.l    d1
  1727.     add.l    d1,d1
  1728.     add.l    d1,2(a1)    
  1729. .2    rts
  1730.  
  1731. z_tpvsl    bsr    z_port2            Cmd 5:    Tone portamento and vol slide
  1732.     bra.s    z_volsl
  1733.  
  1734. z_vibvs    bsr.s    z_dovib            Cmd 6:    Vibrato and volume slide
  1735.  
  1736. z_volsl    move    d1,d0            Cmd A:    Volume slide
  1737.     lsr    #4,d0
  1738.     beq.s    .1
  1739.     add    d0,14(a1)
  1740.     moveq    #$40,d2
  1741.     cmp    14(a1),d2
  1742.     bpl.s    .2
  1743.     move    d2,14(a1)
  1744. .2    rts
  1745. .1    sub    d1,14(a1)
  1746.     bpl.s    .3
  1747.     clr    14(a1)
  1748. .3    rts
  1749.  
  1750. z_posjm    move.b    #$fc,z_pos-z(a5)    Cmd B:    Position jump
  1751.     ext    d1
  1752.     add    d1,d1
  1753.     add    d1,d1
  1754.     subq    #4,d1
  1755.     move.b    d1,z_song-z(a5)
  1756.     rts
  1757.  
  1758. z_setvl    cmp    #$40,d1            Cmd C:    Set volume
  1759.     bls.s    .1
  1760.     moveq    #$40,d1
  1761. .1    move    d1,14(a1)
  1762.     rts
  1763.  
  1764. z_ptbrk    move.b    #$fc,z_pos-z(a5)    Cmd D:    Pattern break
  1765.     rts                (Parameter not supported!)
  1766.  
  1767. z_ecmds    moveq    #$f,d0            Cmd E: Special commands
  1768.     and    d1,d0
  1769.     lsr    #4,d1
  1770.     add    d1,d1
  1771.  
  1772.     move    z_ejump(pc,d1.w),d1
  1773.     jmp    (a5,d1.w)
  1774.  
  1775. z_ejump    dc    z_filtr-z,z_fsldu-z,z_fsldd-z,z_retrn-z
  1776.     dc    z_retrn-z,z_retrn-z,z_retrn-z,z_retrn-z        
  1777.     dc    z_retrn-z,z_retrn-z,z_fvolu-z,z_fvold-z
  1778.     dc    z_retrn-z,z_retrn-z,z_retrn-z,z_retrn-z
  1779.  
  1780. z_filtr    tst    d0            Cmd E0:    Set filter
  1781.     beq.s    .1
  1782.     bset    #1,$bfe001
  1783.     rts
  1784. .1    bclr    #1,$bfe001
  1785.     rts
  1786.  
  1787. z_fsldu    sub    d0,d4            CMD E1:    Fine slide up
  1788.     cmp    #$71,d4
  1789.     bpl.s    .1
  1790.     move    #$71,d4
  1791. .1    move    d4,16(a1)
  1792.     rts
  1793.  
  1794. z_fsldd    add    d0,d4            CMD E2:    Fine slide down
  1795.     cmp    #$358,d4
  1796.     bmi.s    .1
  1797.     move    #$358,d4
  1798. .1    move    d4,16(a1)
  1799.     rts
  1800.  
  1801. z_fvolu    add    d0,14(a1)        Cmd EA:    Fine vol slide up
  1802.     moveq    #$40,d2
  1803.     cmp    14(a1),d2
  1804.     bpl.s    .1
  1805.     move    d2,14(a1)
  1806. .1    rts
  1807.  
  1808. z_fvold    sub    d0,14(a1)        Cmd EB:    Fine vol slide down
  1809.     bpl.s    .1
  1810.     clr    14(a1)
  1811. .1    rts
  1812.  
  1813. z_setsp    move.b    d1,z_speed-z(a5)    Cmd F: Set speed
  1814.     move.b    d1,z_count-z(a5)
  1815.     rts
  1816.  
  1817. z_playo    moveq    #0,d1
  1818.  
  1819. z_playn    move.l    d1,d2            Play notes
  1820.     and    #$0fff,d1
  1821.     move    d1,24(a3)        Save effect command
  1822.     swap    d1
  1823.     and    #$7e,d1
  1824.     beq.s    .5
  1825.     ror.l    #8,d2
  1826.     and    #$01f0,d2
  1827.     bne.s    .1
  1828.  
  1829.     move    20(a3),d2
  1830.     lea    -10(a4,d2.w),a2
  1831.     add    (a2)+,d1
  1832.     addq.l    #2,a2            (sample 0: no volume change!)
  1833.     bra.s    .3
  1834.  
  1835. .1    move    d2,20(a3)        Save sample 0 - pointer
  1836.     lea    -10(a4,d2.w),a2
  1837.     add    (a2)+,d1
  1838.     move    (a2)+,14(a3)
  1839.  
  1840. .3    move    d1,18(a3)
  1841.     move    z_notes(pc,d1.w),d1
  1842.     move    d1,30(a3)
  1843.  
  1844.     cmp.b    #3,24(a3)        Effect 3: don't care about sample
  1845.     beq.s    .2
  1846.  
  1847.     move    d1,16(a3)
  1848.     move    (a3),d1
  1849.     or    d1,z_dmaen-z(a5)
  1850.  
  1851. .4    move    (a2)+,6(a3)
  1852.     move    (a2)+,12(a3)
  1853.     move.l    (a2)+,2(a3)
  1854.     move.l    (a2)+,8(a3)
  1855. .2    rts
  1856.  
  1857. .5    ror.l    #8,d2            No note: change repeat pointers
  1858.     and    #$01f0,d2
  1859.     beq.s    .2
  1860.     move    d2,20(a3)
  1861.     lea    -8(a4,d2.w),a2
  1862.     move    (a2)+,14(a3)
  1863.     bra.s    .4
  1864.  
  1865. z_notes    dc    0
  1866.  
  1867.     dc    856,808,762,720,678,640,604,570,538,508,480,453
  1868.     dc    428,404,381,360,339,320,302,285,269,254,240,226
  1869.     dc    214,202,190,180,170,160,151,143,135,127,120,113
  1870.  
  1871.     dc    850,802,757,715,674,637,601,567,535,505,477,450
  1872.     dc    425,401,379,357,337,318,300,284,268,253,239,225
  1873.     dc    213,201,189,179,169,159,150,142,134,126,119,113
  1874.  
  1875.     dc    844,796,752,709,670,632,597,563,532,502,474,447
  1876.     dc    422,398,376,355,335,316,298,282,266,251,237,224
  1877.     dc    211,199,188,177,167,158,149,141,133,125,118,112
  1878.  
  1879.     dc    838,791,746,704,665,628,592,559,528,498,470,444
  1880.     dc    419,395,373,352,332,314,296,280,264,249,235,222
  1881.     dc    209,198,187,176,166,157,148,140,132,125,118,111
  1882.  
  1883.     dc    832,785,741,699,660,623,588,555,524,495,467,441
  1884.     dc    416,392,370,350,330,312,294,278,262,247,233,220
  1885.     dc    208,196,185,175,165,156,147,139,131,124,117,110
  1886.  
  1887.     dc    826,779,736,694,655,619,584,551,520,491,463,437
  1888.     dc    413,390,368,347,328,309,292,276,260,245,232,219
  1889.     dc    206,195,184,174,164,155,146,138,130,123,116,109
  1890.  
  1891.     dc    820,774,730,689,651,614,580,547,516,487,460,434
  1892.     dc    410,387,365,345,325,307,290,274,258,244,230,217
  1893.     dc    205,193,183,172,163,154,145,137,129,122,115,109
  1894.  
  1895.     dc    814,768,725,684,646,610,575,543,513,484,457,431
  1896.     dc    407,384,363,342,323,305,288,272,256,242,228,216
  1897.     dc    204,192,181,171,161,152,144,136,128,121,114,108
  1898.  
  1899.     dc    907,856,808,762,720,678,640,604,570,538,508,480
  1900.     dc    453,428,404,381,360,339,320,302,285,269,254,240
  1901.     dc    226,214,202,190,180,170,160,151,143,135,127,120
  1902.  
  1903.     dc    900,850,802,757,715,675,636,601,567,535,505,477
  1904.     dc    450,425,401,379,357,337,318,300,284,268,253,238
  1905.     dc    225,212,200,189,179,169,159,150,142,134,126,119
  1906.  
  1907.     dc    894,844,796,752,709,670,632,597,563,532,502,474
  1908.     dc    447,422,398,376,355,335,316,298,282,266,251,237
  1909.     dc    223,211,199,188,177,167,158,149,141,133,125,118
  1910.  
  1911.     dc    887,838,791,746,704,665,628,592,559,528,498,470
  1912.     dc    444,419,395,373,352,332,314,296,280,264,249,235
  1913.     dc    222,209,198,187,176,166,157,148,140,132,125,118
  1914.  
  1915.     dc    881,832,785,741,699,660,623,588,555,524,494,467
  1916.     dc    441,416,392,370,350,330,312,294,278,262,247,233
  1917.     dc    220,208,196,185,175,165,156,147,139,131,123,117
  1918.  
  1919.     dc    875,826,779,736,694,655,619,584,551,520,491,463
  1920.     dc    437,413,390,368,347,328,309,292,276,260,245,232
  1921.     dc    219,206,195,184,174,164,155,146,138,130,123,116
  1922.  
  1923.     dc    868,820,774,730,689,651,614,580,547,516,487,460
  1924.     dc    434,410,387,365,345,325,307,290,274,258,244,230
  1925.     dc    217,205,193,183,172,163,154,145,137,129,122,115
  1926.  
  1927.     dc    862,814,768,725,684,646,610,575,543,513,484,457
  1928.     dc    431,407,384,363,342,323,305,288,272,256,242,228
  1929.     dc    216,203,192,181,171,161,152,144,136,128,121,114
  1930.  
  1931. z_sinus    dc    $0000,$0018,$0031,$004a,$0061,$0078,$008d,$00a1
  1932.     dc    $00b4,$00c5,$00d4,$00e0,$00eb,$00f4,$00fa,$00fd
  1933.     dc    $00ff,$00fd,$00fa,$00f4,$00eb,$00e0,$00d4,$00c5
  1934.     dc    $00b4,$00a1,$008d,$0078,$0061,$004a,$0031,$0018
  1935.     dc    $0000,$ffe8,$ffcf,$ffb6,$ff9f,$ff88,$ff73,$ff5f
  1936.     dc    $ff4c,$ff3b,$ff2c,$ff20,$ff15,$ff0c,$ff06,$ff03
  1937.     dc    $ff01,$ff03,$ff06,$ff0c,$ff15,$ff20,$ff2c,$ff3b
  1938.     dc    $ff4c,$ff5f,$ff73,$ff88,$ff9f,$ffb6,$ffcf,$ffe8
  1939.  
  1940. ** ====    Variables =============================================    **
  1941.  
  1942. z_song    dc    0
  1943. z_pos    dc.b    0
  1944. z_speed    dc.b    0
  1945. z_count    dc.b    0
  1946.     even
  1947. z_patt    dc.l    0
  1948. z_dmaen    dc    0
  1949.  
  1950. z_ociab    ds.b    14
  1951.  
  1952. z_voi1    dc    1
  1953.     ds.b    30
  1954. z_voi2    dc    2
  1955.     ds.b    30
  1956. z_voi3    dc    4
  1957.     ds.b    30
  1958. z_voi4    dc    8
  1959.     ds.b    30
  1960.  
  1961. z_vibtb    ds.b    1024
  1962.  
  1963. ;; <6>
  1964.  
  1965. biisi        incbin    "darkroom.zen"
  1966. biisi_l        = *-biisi
  1967.         even
  1968.  
  1969. pic_2        incbin    "darkroom.raw"
  1970.  
  1971. »»»»»»»    bss (fast) »»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  1972.  
  1973.     section    ada,bss
  1974.  
  1975. fast_siz    =    $1000
  1976. fast        ds.b    fast_siz
  1977.  
  1978. fractar_1    =    fast
  1979. zoomaa_1    =    fast+200
  1980. rotate_1    =    fast+400
  1981. hold_1        =    fast+600
  1982.  
  1983. sin_3        =    fast
  1984. cos_3        =    fast+$200
  1985. star_3        =    fast+$a00
  1986.  
  1987. sin_4        =    fast
  1988. rata_4        =    fast+360
  1989.     ;(ds.w 3*lines)
  1990.  
  1991. »»»»»»»    bss-chip »»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  1992.  
  1993.     section    we,bss_c
  1994.  
  1995. z_data        ds.b    $10000
  1996. chip_siz    =    $30000
  1997. chip        ds.b    chip_siz
  1998.  
  1999. g_1        =    chip
  2000. bpa1_1        =    chip+$3000
  2001. bpa2_1        =    chip+$5800
  2002. bpa3_1        =    chip+$8000
  2003. bpa4_1        =    chip+$a800
  2004. bpb1_1        =    chip+$d000
  2005. bpb2_1        =    chip+$f800
  2006. bpb3_1        =    chip+$12000
  2007. bpb4_1        =    chip+$14800
  2008. t_1        =    chip+$18000
  2009.  
  2010. bpl1_2        =    chip
  2011. temp_2        =    chip+$2828
  2012. bpl2_2        =    chip+$5050
  2013. bpl3_2        =    chip+$7850
  2014. bpl4_2        =    chip+$a050
  2015. bpl_tx_2    =    chip+$c850
  2016.  
  2017. line1_3        =    chip
  2018. line2_3        =    chip+160
  2019. l_even_3    =    chip+320
  2020. l_odd_3        =    chip+360
  2021. copper1_3    =    chip+400
  2022. copper2_3    =    chip+$5190
  2023. cmaps_3        =    chip+$a190
  2024.  
  2025. bpl1_4        =    chip
  2026. bpl2_4        =    chip+$3200
  2027. bpl3_4        =    chip+$6400
  2028.  
  2029.  
  2030. »»»»»»»    copperlistat, ym chip-kama »»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
  2031.  
  2032.     section    rw,data_c
  2033.  
  2034. copper_0    dc    $0100,$0000,$0180,$0000
  2035.         dc.l    -2
  2036.  
  2037. »» routine 1
  2038.  
  2039. scopa_1        dc    $008e,$2c81,$0090,$2cc1
  2040.         dc    $0092,$0038,$0094,$00d0
  2041.         dc    $0108,$0000,$010a,$0000
  2042.         dc    $0100,$4000,$0102,$0000
  2043.  
  2044.     ;    dc    $0180,$0000,$0182,$0100,$0184,$0200,$0186,$0300
  2045.     ;    dc    $0188,$0400,$018a,$0500,$018c,$0600,$018e,$0700
  2046.     ;    dc    $0190,$0800,$0192,$0910,$0194,$0a20,$0196,$0b30
  2047.     ;    dc    $0198,$0c40,$019a,$0d50,$019c,$0e60,$019e,$0f70
  2048.  
  2049.         dc    $0180,$0000,$0182,$0001,$0184,$0002,$0186,$0003
  2050.         dc    $0188,$0004,$018a,$0005,$018c,$0006,$018e,$0007
  2051.         dc    $0190,$0008,$0192,$0009,$0194,$000a,$0196,$000b
  2052.         dc    $0198,$000c,$019a,$000d,$019c,$000e,$019e,$000f
  2053.  
  2054. sptra_1        dc    $00e0,$0000,$00e2,$0000
  2055.         dc    $00e4,$0000,$00e6,$0000
  2056.         dc    $00e8,$0000,$00ea,$0000
  2057.         dc    $00ec,$0000,$00ee,$0000
  2058.         dc.l    -2
  2059. scopb_1
  2060. sptrb_1        dc    $00e0,$0000,$00e2,$0000
  2061.         dc    $00e4,$0000,$00e6,$0000
  2062.         dc    $00e8,$0000,$00ea,$0000
  2063.         dc    $00ec,$0000,$00ee,$0000
  2064.         dc.l    -2
  2065.  
  2066. »» routine 2
  2067.  
  2068. copper_2    dc    $008e,$2c81,$0090,$2cc1
  2069.         dc    $0092,$0038,$0094,$00d0
  2070.         dc    $0100,$4000,$0102,$0000
  2071.         dc    $0108,$0000,$010a,$0000
  2072.     
  2073. fadehere_2    dc    $0180,$0000,$0182,$0226,$0184,$0226,$0186,$033a
  2074.         dc    $0188,$0226,$018a,$033a,$018c,$033a,$018e,$044f
  2075.         dc    $0190,$044f,$0192,$066f,$0194,$066f,$0196,$0aaf
  2076.         dc    $0198,$066f,$019a,$0aaf,$019c,$0aaf,$019e,$0fff
  2077.  
  2078.         dc.l    -2
  2079.  
  2080. »» routine 4
  2081.  
  2082. copper_4    dc    $008e,$2c81,$0090,$2cc1
  2083.         dc    $0092,$0038,$0094,$00d0
  2084.         dc    $0100,$2000,$0102,$0001
  2085.         dc    $0108,$0000,$010a,$0000
  2086.         dc    $0180,$0000,$0182,$0006,$0184,$0006,$0186,$000c
  2087.         dc    $0188,$0ccc,$018a,$0ccf,$018c,$0ccf,$018e,$0ccf
  2088. lin1_4        dc    $9911,$fffe,$0100,$3000
  2089. lin2_4        dc    $bf11,$fffe,$0100,$2000
  2090.         dc.l    -2
  2091.  
  2092. pic_4        incbin    "credits.raw"    
  2093.  
  2094.